﻿//using ArtMath.Helpers;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;

//namespace ArtMath.PointCollections
//{
//    [Serializable]
//    public class Arch : Arc
//    {
//        public override bool Contains(PointD pt)
//        {
//            if (pt.OnLineSegment(StartPoint, EndPoint)) return true;
//            return base.Contains(pt);
//        }
//        public override PointD? GetNearestPoint(PointD pt)
//        {
//            double angle = Center.GetAngle(pt);
//            if (Utility.InSweepRange(Start, Sweep, angle) && !pt.InRegion(new PointD[] { Center, StartPoint, EndPoint }))
//            {
//                return Center.Offset(angle, Radius, false);
//            }
//            else
//            {
//                if (Utility.ScalarProduct(StartPoint, EndPoint, StartPoint, pt) < 0)
//                {
//                    return StartPoint;
//                }
//                else if (Utility.ScalarProduct(EndPoint, StartPoint, EndPoint, pt) < 0)
//                {
//                    return EndPoint;
//                }
//                else
//                {
//                    return pt.GetProjectivePoint(StartPoint, EndPoint);
//                }
//            }
//        }
//    }
//}
